#include "include/muduo/net/TcpServer.h"
#include "include/muduo/net/EventLoop.h"
#include "include/muduo/net/TcpConnection.h"
#include "include/muduo/base/CountDownLatch.h"
#include <iostream>
#include <functional>
#include <unordered_map>
class TranslateServer
{
public:
TranslateServer(int port):_server(&_baseloop,
muduo::net::InetAddress("0.0.0.0",port),"Translate",muduo::net::TcpServer::kReusePort)
{
 //将我们的类成员函数设置为服务器的回调函数
 //std::bind是一个函数适配器对指定的函数进行参数绑定
 _server.setConnectionCallback(std::bind(&TranslateServer::onConnection,this,std::placeholders::_1));
 _server.setMessageCallback(std::bind(&TranslateServer::onMessage,this,std::placeholders::_1,
 std::placeholders::_2,std::placeholders::_3 ));

}
//启动服务器
void start()
{
 _server.start();//开始事件监听
 _baseloop.loop();//开始事件监控，这是一个死循环堵塞接口
}
private:
  std::string translate(const std::string& str)
  {
        std::unordered_map<std::string,std::string> dict_map={{"hello","你好"},{"apple","苹果"}};
         auto it=dict_map.find(str);
         if(it==dict_map.end())
         {
            return "不知道";
         }else{
            return it->second;
         }
        

  }
//这是一个连接成功时的回调函数（连接建立成功和关闭的时候调用）
   void onConnection(const muduo::net::TcpConnectionPtr& conn)
   {
    if(conn->connected()==true)
    {
    std::cout<<"新连接建立成功\n"<<std::endl;
    }else{
        std::cout<<"新连接关闭\n"<<std::endl;
    }

   }
   void  onMessage(const muduo::net::TcpConnectionPtr& conn,muduo::net::Buffer* buf,muduo::Timestamp)
   {//通信连接收到请求时的回调函数
   //1.从buf中读取请求
   std::string str=buf->retrieveAllAsString();
   //2.调用接口进行翻译
   std::string resp=translate(str);
   //3.对客户端进行响应
   std::cout<<"发送消息:"<<resp<<std::endl;
   conn->send(resp);
   

   }
private:
muduo::net::EventLoop _baseloop;
muduo::net::TcpServer _server;


};
int main()
{
    TranslateServer server(8085);
    server.start();
    return 0;
}